Next: Minor Modes, Up: Modes [Contents][Index]
Every buffer possesses a major mode, which determines the editing behavior of Emacs while that buffer is current. The mode line normally shows the name of the current major mode, in parentheses (see Mode Line).
The least specialized major mode is called Fundamental mode. This mode has no mode-specific redefinitions or variable settings, so that each Emacs command behaves in its most general manner, and each user option variable is in its default state.
For editing text of a specific type that Emacs knows about, such as Lisp code or English text, you typically use a more specialized major mode, such as Lisp mode or Text mode. Most major modes fall into three major groups. The first group contains modes for normal text, either plain or with mark-up. It includes Text mode, HTML mode, SGML mode, TeX mode and Outline mode. The second group contains modes for specific programming languages. These include Lisp mode (which has several variants), C mode, Fortran mode, and others. The third group consists of major modes that are not associated directly with files; they are used in buffers created for specific purposes by Emacs, such as Dired mode for buffers made by Dired (see Dired), Message mode for buffers made by C-x m (see Sending Mail), and Shell mode for buffers used to communicate with an inferior shell process (see Interactive Shell).
Usually, the major mode is automatically set by Emacs, when
you first visit a file or create a buffer (see Choosing Modes). You can
explicitly select a new major mode by using an M-x
command. Take the name of the mode and add -mode to
get the name of the command to select that mode (e.g., M-x
lisp-mode enters Lisp mode).
The value of the buffer-local variable major-mode
is a symbol with the same name as the major mode command (e.g.,
lisp-mode). This variable is set automatically; you
should not change it yourself.
The default value of major-mode determines the
major mode to use for files that do not specify a major mode, and
for new buffers created with C-x b. Normally, this
default value is the symbol fundamental-mode, which
specifies Fundamental mode. You can change this default value via
the Customization interface (see Easy
Customization), or by adding a line like this to your init
file (see Init File):
(setq-default major-mode 'text-mode)
If the default value of major-mode is
nil, the major mode is taken from the previously
current buffer.
Specialized major modes often change the meanings of certain
keys to do something more suitable for the mode. For instance,
programming language modes bind TAB to
indent the current line according to the rules of the language
(see Indentation). The
keys that are commonly changed are TAB,
DEL, and C-j. Many modes also
define special commands of their own, usually bound in the prefix
key C-c. Major modes can also alter user options and
variables; for instance, programming language modes typically set
a buffer-local value for the variable comment-start,
which determines how source code comments are delimited (see
Comments).
To view the documentation for the current major mode,
including a list of its key bindings, type C-h m
(describe-mode).
Every major mode, apart from Fundamental mode, defines a
mode hook, a customizable list of Lisp functions to run
each time the mode is enabled in a buffer. See Hooks, for more information about hooks.
Each mode hook is named after its major mode, e.g., Fortran mode
has fortran-mode-hook. Furthermore, all text-based
major modes run text-mode-hook, and all programming
language modes run prog-mode-hook, prior to running
their own mode hooks. Hook functions can look at the value of the
variable major-mode to see which mode is actually
being entered.
Mode hooks are commonly used to enable minor modes (see Minor Modes). For example, you can put the following lines in your init file to enable Flyspell minor mode in all text-based major modes (see Spelling), and Eldoc minor mode in Emacs Lisp mode (see Lisp Doc):
(add-hook 'text-mode-hook 'flyspell-mode) (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)
Next: Minor Modes, Up: Modes [Contents][Index]